home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / Font.h < prev    next >
C/C++ Source or Header  |  1990-11-28  |  4KB  |  204 lines

  1. #ifndef Font_First
  2. #ifdef __GNUG__
  3. #pragma once
  4. #endif
  5. #define Font_First
  6.  
  7. #include "Root.h"
  8. #include "Rectangle.h"
  9.  
  10. #define MINSIZE     6
  11. #define MAXSIZE     24
  12. #define SIZES       (MAXSIZE-MINSIZE+1)
  13.  
  14. enum GrFont {
  15.     eFontTimes,
  16.     eFontHelvetica,
  17.     eFontCourier,
  18.     eFontSymbol,
  19.     eFontChicago,
  20.     eFontAvantgarde,
  21.     eFontBookman,
  22.     eFontSchoolbook,
  23.     eFontGacha,
  24.     eFontGeneva,
  25.     eFontMonaco,
  26.     eFontNHelvetica,
  27.     eFontPalatino,
  28.     eFontChancery,
  29.     eFontDingbats,
  30.     eFontAthens,
  31.     eFontCairo,
  32.     eFontLondon,
  33.     eFontLosAngeles,
  34.     eFontMobile,
  35.     eFontNewYork,
  36.     eFontSanFrancisco,
  37.     eFontVenice,
  38.     
  39.     eFontDefault=eFontTimes
  40. };
  41.  
  42. enum GrFace {
  43.     eFacePlain      = 0,
  44.     eFaceBold       = BIT(0),
  45.     eFaceItalic     = BIT(1),
  46.     eFaceUnderline  = BIT(2),
  47.     eFaceOutline    = BIT(3),
  48.     eFaceShadow     = BIT(4),
  49. };
  50.  
  51. enum GrHAdjust {
  52.     eAdjHLeft,
  53.     eAdjHCenter,
  54.     eAdjHRight
  55. };
  56.  
  57. enum GrVAdjust {
  58.     eAdjVBottom,
  59.     eAdjVTop,
  60.     eAdjVBase,
  61.     eAdjVCenter
  62. };
  63.  
  64. class Font;
  65.  
  66. typedef Font *FontPtr;
  67.  
  68. class Font : public Root {
  69. protected:
  70.     u_short cw[256];        // character widths
  71.     GrFont family;          // family id
  72.     GrFace face;            // style
  73.     bool fixed;             // is a fixed character font
  74.     short size;             // point size
  75.     short ils;              // interline spacing
  76.     short ht;               // maximum ascender
  77.     short bs;               // maximum descender
  78.     short width;            // max width
  79.     
  80. public:
  81.     
  82.     friend Font *new_Font(GrFont fid, int size, GrFace face= eFacePlain);
  83.  
  84.     int Width(byte c)
  85.     { return cw[c]; }
  86.     int Width(byte*, int l= -1);
  87.     int MaxWidth(int l= 1);
  88.     Metric GetMetric(byte *s, int l= -1);
  89.     Metric GetMetric(byte c);
  90.     Rectangle BBox(byte *s, int l= -1);
  91.     Rectangle BBox(byte c, Point pos);
  92.     Point AdjustString(byte *s, Point p, GrVAdjust va, GrHAdjust ha);
  93.     int Ascender()
  94.     { return ht; }
  95.     int Descender()
  96.     { return bs; }
  97.     GrFont Fid()
  98.     { return family; }
  99.     int Size()
  100.     { return size; }
  101.     GrFace Face()
  102.     { return face; }
  103.     int Spacing()
  104.     { return ils; }
  105.     bool Fixed()
  106.     { return fixed; }
  107.  
  108.     Font *WithFace(GrFace face);
  109.     Font *WithSize(int size);
  110.  
  111.     virtual ostream& StoreOn(ostream&);
  112.     virtual bool Loaded();
  113.     virtual bool LoadFont();
  114.     virtual Font *MakeFont(Font**, GrFace);
  115.     virtual void MakeChar(Font*, GrFace, byte, Font*);
  116.     virtual class DevBitmap *CharAsBitmap(byte, Point *offset);
  117.  
  118.     void CheckChar(byte c);
  119.     Font *Load();
  120.     char *AsString();
  121.  
  122.     friend ostream& operator<<(ostream&, FontPtr&);
  123.     friend istream& operator>>(istream&, FontPtr&);
  124. };
  125.  
  126. SimpleMetaDef(Font);
  127.  
  128. extern Font *gSysFont,
  129.         *gApplFont,
  130.         *gFixedFont;
  131.  
  132. //---- FontFamily --------------------------------------------------------------
  133.  
  134. class FontFamily {
  135. public:
  136.     GrFont familyid;
  137.     char *name;
  138.     char *name1;
  139.     bool ispsfont;
  140.     Font **smap[SIZES];
  141.     
  142. public:
  143.     FontFamily(GrFont fid, char *n, char *family, bool isps);
  144.     virtual ~FontFamily();
  145.     void AddFont(char *fontname, GrFace fc, int ps);
  146.     bool IsPSFont()
  147.     { return ispsfont; }
  148.     
  149.     char *Name()
  150.     { return name; }
  151.     
  152.     char *Name1()
  153.     { return name1; }
  154.     
  155.     Font **MapSize(int);
  156.  
  157.     Font *MapSizeFace(int, GrFace);
  158. };
  159.  
  160. typedef FontFamily *FontFamilyPtr;
  161.  
  162. //---- FontManager -------------------------------------------------------------
  163.  
  164. class FontManager : public Root {
  165.     char *fontDir;
  166.     class FontFamily **fmap;
  167.     
  168. public:
  169.     FontManager(char *lib);
  170.     virtual ~FontManager();
  171.     
  172.     bool Init();        // returns TRUE on error
  173.     
  174.     virtual Font *MapFont(GrFont font, int size, GrFace face);
  175.     virtual Font *MakeFont(char*, GrFont, int, GrFace);
  176.     
  177.     FontFamily *MapFamily(GrFont fid)
  178.     { return fmap[fid]; }
  179.     
  180.     Font **MapFamilySize(GrFont fid, int size)
  181.     { return MapFamily(fid)->MapSize(size); }
  182.  
  183.     Font *MapFamilySizeFace(GrFont fid, int size, GrFace face)
  184.     { return MapFamily(fid)->MapSizeFace(size, face); }
  185.     
  186.     char *Name(GrFont fid)
  187.     { return MapFamily(fid)->Name(); }
  188.     
  189.     bool IsPSFont(GrFont fid)
  190.     { return MapFamily(fid)->IsPSFont(); }
  191.       
  192.     virtual Font *ScaleFont(Font*, GrFont, int, GrFace);
  193.     
  194.     char *StyleString(GrFace face);
  195.  
  196.     int NameToId(char *fontname);
  197.     char *IdToName(GrFont fid);
  198. };
  199.  
  200. extern FontManager *gFontManager;
  201.  
  202. #endif Font_First
  203.  
  204.